package com.cnap.service;

import com.cnap.db.entity.IndicatorCasePO;
import com.cnap.db.entity.IndicatorPO;
import com.cnap.model.common.PageResult;
import com.cnap.model.indicator.*;

import java.util.List;

/**
 * 指标服务类
 *
 * @author xc
 **/
public interface IndicatorService {

    /**
     * 批量插入指标实例
     *
     * @param indicatorCasePOS 列表
     * @return 结果
     */
    boolean batchInsertIndicatorCases(List<IndicatorCasePO> indicatorCasePOS);

    /**
     * 根据指标类型查询
     *
     * @param indicatorType 指标类型，算力cal，网络net
     * @param category      分类，AI 大数据
     * @param type          二级分类，AI：静态训练，动态训练，大数据：离线处理，实时处理
     * @return 结果
     */
    List<IndicatorPO> getIndicatorByIndicatorTypeAndCategoryAndType(String indicatorType, String category, String type);

    /**
     * 根据指标类型查询所有
     *
     * @param category 分类，AI 大数据
     * @param type     二级分类，AI：静态训练，动态训练，大数据：离线处理，实时处理
     * @return 结果
     */
    List<IndicatorPO> getIndicatorByCategoryAndType(String category, String type);

    /**
     * 根据服务id查询所有指标
     *
     * @param serviceId 服务id
     * @return 结果
     */
    IndicatorVO getAllIndicatorByServiceId(String serviceId);

    /**
     * 根据应用id删除指标实例
     *
     * @param appId 应用id
     * @return 结果
     */
    boolean deleteIndicatorCaseByAppId(String appId);

    /**
     * 根据微服务id删除指标实例
     *
     * @param svcId 微服务id
     * @return 结果
     */
    boolean deleteIndicatorCaseBySvcId(String svcId);

    /**
     * 分页查询
     *
     * @param queryIndicatorParam 参数
     * @return 结果
     */
    PageResult<IndicatorPO> findByPage(QueryIndicatorParam queryIndicatorParam);


    /**
     * 批量更新值
     *
     * @param params 参数
     */
    void batchUpdateValues(List<UpdateIndicatorParam> params);

    /**
     * 模糊查询应用场景
     *
     * @param querySceneParam 参数
     * @return 结果
     */
    List<String> queryScenes(QuerySceneParam querySceneParam);

    /**
     * 模糊查询指标名称
     *
     * @param queryIndicatorNameParam 参数
     * @return 结果
     */
    List<String> queryIndicatorNames(QueryIndicatorNameParam queryIndicatorNameParam);

    /**
     * 查询指标实例
     *
     * @param queryIndicatorCaseParam 参数
     * @return 结果
     */
    TreeNode findIndicatorCase(QueryIndicatorCaseParam queryIndicatorCaseParam);

    /**
     * 更新指标实例
     *
     * @param updateCaseParam 参数
     * @return 结果
     */
    boolean updateCaseValue(UpdateCaseParam updateCaseParam);
}
